package vn.edu.thptduongbachmai.model;

import com.vng.zing.common.HReqParam;
import com.vng.zing.exception.InvalidParamException;
import com.vng.zing.exception.NotExistException;
import com.vng.zing.logger.ZLogger;
import hapax.TemplateDataDictionary;
import java.util.List;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.log4j.Logger;
import vn.edu.thptduongbachmai.common.Paging;
import vn.edu.thptduongbachmai.common.TemplateManager;
import vn.edu.thptduongbachmai.model.data.TaiKhoanModel;
import vn.edu.thptduongbachmai.model.pojo.TaiKhoan;

/**
 * @Note: Class model xử lý business chính cho mỗi loại handler/controller ,
 * được thiết kế theo pattern Singleton Object, thiết kế kiểu này cho phép các
 * Model object truy xuất được lẫn nhau (cùng package nên truy xuất được các
 * thuộc tính protected của nhau), có thể bổ sung thiết kế bằng cách tạo ra 1
 * BaseModel xử lý các hàm tiện ích chung, các Biz Model khác thừa kế từ đó
 *
 * @author tiennv4
 */
public class HomeModel extends BaseModel {

    private static final Logger _Logger = ZLogger.getLogger(HomeModel.class);
    public static final HomeModel Instance = new HomeModel();

    private HomeModel() {
    }

    @Override
    public TemplateDataDictionary prepareLayout() {
        try {
            TemplateDataDictionary dic = TemplateManager.getDictionary();
            TemplateDataDictionary content = dic.addSection("CONTENT");
            TemplateDataDictionary section = content.addSection("SECTION");

            content.showSection("page/header");
            content.showSection("page/navigation");
            content.showSection("page/sitemap");
            section.showSection("page/section");
            content.showSection("page/footer");
            return dic;
        } catch (InvalidParamException invalidParamException) {
            _Logger.error(invalidParamException, invalidParamException);
        } catch (NotExistException notExistException) {
            _Logger.error(notExistException, notExistException);
        }
        return null;
    }

    @Override
    public TemplateDataDictionary prepareBody(TemplateDataDictionary dic) {
        TemplateDataDictionary content = dic.getSection("CONTENT").get(0);
        TemplateDataDictionary section = content.getSection("SECTION").get(0);
        section.showSection("home/index");
        section.showSection("wiget/table");

        return dic;

    }

    @Override
    public TemplateDataDictionary pullData(TemplateDataDictionary dic, HttpServletRequest req) {
        int page = HReqParam.getInt(req, "page", 1);
        String[] fieldNames = TaiKhoan.getFieldNames();
        int totalItem = TaiKhoanModel.Instance.getCountList();
    
        Paging<TaiKhoan> paging = new Paging<TaiKhoan>(page,10,totalItem,dic,fieldNames,"stats");
        List<TaiKhoan> list = TaiKhoanModel.Instance.getSlideUsersDateModifyDes(paging.getPosition(), paging.getPageSize());
        
        paging.setData(list); // set dữ liệu để phân trang
        dic = paging.doPaging(); // thực hiện phân trang và đẩy data zô dic

        return dic;
    }

    @Override
    public void render(TemplateDataDictionary dic, HttpServletResponse resp) {
        TemplateManager.view(resp, dic);


    }
}
